home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
TPUG - Toronto PET Users Group
/
TPUG Users Group CD
/
TPUG Users Group CD.iso
/
CRS
/
crs47.d81
/
burst64.sfx
/
burst.tech
< prev
Wrap
Text File
|
1990-02-12
|
12KB
|
487 lines
┬╒╥╙╘ ╘ECH: ╨ART ╔╔ OF
┴DDING ┬╒╥╙╘ ═ODE TO A ├64
--------------------------
┬Y ┴NDREW ┼. ═ILESKI
"╥ECURSION" ON ╤-╠INK
├OPYRIGHT AS OF ╬OVEMBER 5,1989
╓ERSION ─ATED ╙EPTEMBER 1, 1990
╘HIS FILE IS BEING OFFERED "╙HARE╫ARE"
╨LEASE SEND $5 OR ANY AMOUNT YOU THINK
IS SUITABLE FOR THIS TWO PART ARTICLE:
┴NDREW ┼. ═ILESKI
210-180 ╠EES ┴VENUE
╧TTAWA, ╧NTARIO
├ANADA ╦1╙ 5╩6
╘HE MONEY WILL BE USED TO SAVE MY ├64
FROM THE AUCTION BLOCK, SO ╔ CAN
CONTINUE TO BRING YOU PROJECTS LIKE
THIS ONE.
╬OTE: ╘HIS FILE IS MEANT TO GIVE THE
ADVANCED PROGRAMMER SOME IDEA OF
HOW TO INCORPORATE ┬╒╥╙╘ MODE IN
HIS/HER PROGRAMMES. ╔T IS NOT A
"HOLD YOUR HAND" TYPE OF FILE, SO
YOU'LL NEED TO DO SOME READING ON
YOUR OWN IN THE AREAS OF MACHINE
LANGUAGE PROGRAMMING, AND THE
╔NPUT/╧UTPUT CHIPS OF THE ├64
(ESPECIALLY THE 6526 ├OMPLEX
╔NTERFACE ┴DAPTOR CHIP).
├OMMODORE 64 ╨ROGRAMMERS ╥EFERENCE
╟UIDE (FIRST EDITION) ┴PPENDIX ═, PAGES
419-435 EXPLAIN THE ├╔┴ IN DEPTH.
├OMMODORE 1581 ╒SER'S ╟UIDE (1987)
├HAPTER 9, PAGES 91-99 EXPLAIN ┬╒╥╙╘
MODE IN DEPTH.
1581 ─╧╙ ╥EFERENCE ╟UIDE (1988) BY
─AVID ╫. ═ARTIN (AVAILABLE FROM
╙OFTWARE ╙UPPORT ╔NTERNATIONAL).
-----------------------
┬╒╥╙╘ ═ODE
----------
┬╒╥╙╘ MODE IS VERY SIMPLE TO UNDERSTAND
AND USE. ╘HE COMPUTER AND DRIVE STILL
COMMUNICATE IN SERIAL FORM (BIT BY BIT)
LIKE THE STANDARD SERIAL BUS, BUT THE
DATA IS SENT AT A MUCH HIGHER RATE BY
USING A HARDWARE DRIVEN SERIAL PORT.
╘HE DATA IS TRANSFERED IN PACKETS OF 8
BITS AT HIGH SPEED, OR IN 8 BIT ┬╒╥╙╘S.
╘HIS IS HOW ╔ BELIEVE THE PROTOCOL
DERIVED ITS NAME.
╘HE ┬╒╥╙╘ PROTOCOL DOES NOT INTERFERE
WITH THE CONVENTIONAL SLOW SERIAL BUS.
╘HIS WAS DONE SO THAT NON-┬╒╥╙╘ CAPABLE
DEVICES WOULDN'T GET CONFUSED WHEN A
┬╒╥╙╘ TRANSFER WAS TAKING PLACE.
╘HE SAME STANDARD SERIAL CABLE IS USED
FOR ┬╒╥╙╘ MODE. ╘HE DATA IS STILL
TRANSFERED ON THE ─┴╘┴ LINE, BUT THE
╙╥╤ (╙ERVICE ╥E╤UEST) LINE IS NOW USED
FOR TIMING THE HARDWARE SERIAL PORTS,
AND THE ├╠╦ (├╠OC╦) LINE IS NOW USED
FOR A ┬╒╥╙╘ HANDSHAKE.
┬╒╥╙╘α╚ANDSHAKE
---------------
╘HE ┬╒╥╙╘ PROTOCOL IS RECEIVER DRIVEN.
╘HIS MEANS THAT THE RECEIVER, EITHER
THE ├64 OR THE DRIVE, IS IN CHARGE OF
THE DATA TRANSFER. ╘HE HANDSHAKE IS
DONE THROUGH THE USE OF THE ├╠╦ SERIAL
BUS SIGNAL. ╫HENEVER THE RECEIVER
CHANGES THE STATE OF THE ├╠╦ LINE, THIS
MEANS THAT THE RECEIVER IS READY FOR
MORE DATA.
┬╒╥╙╘ ╨ROTOCOL
--------------
┴LMOST ALL ┬╒╥╙╘ COMMANDS USE THE
┬╒╥╙╘ PROTOCOL. ╘HE ┬╒╥╙╘ COMMAND IS
SIMPLY ISSUED TO THE DRIVE'S COMMAND
CHANNEL USING THE NORMAL SLOW SERIAL
BUS. ╘HE COMMAND INCLUDES THE OPERANDS
AND DATA, IF ANY, THAT ARE INITIALLY
SENT. ╘HE DRIVE WILL THEN USUALLY
RESPOND WITH A ┬╒╥╙╘ STATUS BYTE,
AND/OR DATA WHICH IS TRANSFERED BYTE BY
BYTE USING THE ┬╒╥╙╘ HANDSHAKE.
╘HE COMMANDS THAT USE THE CONVENTIONAL
SERIAL BUS PROTOCOL, DO NOT SEND ANY
┬╒╥╙╘ DATA.
┬╒╥╙╘ ─ETECTION
---------------
╘O FIGURE OUT IF A DEVICE IS CAPABLE OF
BURST MODE THERE ARE A FEW SIMPE TESTS
THAT CAN BE DONE. ╙INCE ONLY 1571 AND
1581 DIVES ARE CAPABLE OF BURST MODE,
YOU CAN LOOK FOR THESE DRIVE TYPES AT
POWER UP (USE THE ╒╩ COMMAND), OR EVEN
THROUGH A COMPLEX ╥╧═ TEST.
┴ MUCH SIMPLER WAY IS TO ISSUE A ┬╒╥╙╘
COMMAND, SUCH AS ╤╒┼╥┘α╙╘┴╘╒╙, AND SEE
IF THE DRIVE RESPONDS TO IT AS
EXPECTED.
╨HYSICAL VS ╠OGICAL
-------------------
╔T IS VERY IMPORTANT TO UNDERSTAND THAT
MOST OF THE ┬╒╥╙╘αCOMMANDS USE ╨╚┘╙╔├┴╠
AND NOT THE NORMAL ╠╧╟╔├┴╠ DISK FORMAT.
╘HE ╠╧╟╔├┴╠ FORMAT IS THE ONE WE ARE
MOST FAMILIAR WITH: SINGLE SIDED DISK,
TRACKS 1 TO N, SECTORS 0 TO N OF 256
BYTES. ╘HE ╠╧╟╔├┴╠ FORMAT MAKES ALL
DRIVES LOOK SIMILAR. ╘HE ╨╚┘╙╔├┴╠
FORMATCAN BE QUITE DIFFERENT THOUGH!
╞OR EXAMPLE, THE 1581: DOUBLE SIDED,
TRACKS 0 TO 79, SECTOR 1 TO 10 OF 512
BYTES.
┘OU MUST BE CAREFUL NOT TO EXCEED THE
MAXIMUM SIZE OF THE OPERANDS EITHER,
SINCE THE DRIVE WILL NOT CHECK TO SEE
IF THEY ARE IN LIMITS.
-----------------------
╘HE ├╔┴ AND SERIAL BUS NAMES OF SIGNALS
ARE USED WHERE APPROPRIATE IN THIS
ARTICLE. ╩UST REMEMBER THAT THE SERIAL
BUS SIGNAL ─┴╘┴ IS THE EXACT SAME
SIGNAL ON THE ├╔┴ AS ╙╨. ╘HE SAME GOES
FOR ╙╥╤ AND ├╬╘.
├╔┴ ╙ERIAL ╨ORT
---------------
╧UTPUT
─ATA IS SHIFTED OUT ON THE ╙╨ PIN
ON THE NEGATIVE (-VE) EDGE OF THE ├╬╘
PIN AND IS VALID UNTIL THE NEXT -VE
EDGE OF ├╬╘. ─ATA IS SHIFTED OUT ═╙┬
FIRST AT THE RATE OF HALF THE UNDERFLOW
RATE OF TIMER ┴.
╔NPUT
─ATA IS SHIFTED IN ON THE ╙╨ PIN
ON THE POSITIVE (+VE) EDGE OF THE ├╬╘
PIN. ─ATA IS SHIFTED IN ═╙┬ FIRST.
╘HE ╙╨ AND ├╬╘ PINS ARE ALWAYS BOTH
INPUTS, OR BOTH OUTPUTS.
┴N INTERNAL BIT COUNTER SETS A FLAG
AFTER 8 ├╬╘ PULSES. ╘HIS COUNTER IS
RESET TO ZERO AFTER 8 ├╬╘ PULSES, OR
WHEN THE DIRECTION OF THE PORT IS
CHANGED.
═EMORY ┴DDRESSES
----------------
$─├04 ╘IMER ┴: ╠OW BYTE
$─├05 ╘IMER ┴: ╚IGH BYTE
$─├0├ ╙YNCHRONOUS SERIAL ╔/╧ DATA
BUFFER
$─├0─ ├╔┴ INTERRUPT CONTROL REGISTER
BIT 7 ╔╥╤ FLAG
╥EAD=0 NO INTERRUPTS.
=1 INTERRUPT OCCURRED
╫RITE=0 ─ISABLE THE SOURCES
OF INTERRUPTS, THAT
ARE SET TO 1, FROM
CAUSING A PROCESSOR
INTERRUPT.
╫RITE=1 ┼NABLE THE SOURCES
OF INTERRUPTS, THAT
ARE SET TO 1, TO
CAUSE A PROCESSOR
INTERRUPT.
BIT 4 ╞╠┴╟1 (-VE EDGE ACTIVE).
BIT 3 ╙ERIAL PORT BUFFER IS FULL
OR EMPTY.
BIT 2 ╘IME OF DAY CLOCK ALARM.
BIT 1 ╘IMER ┬ UNDERFLOW.
BIT 0 ╘IMER ┴ UNDERFLOW.
╬OTE ALL INTERRUPTS ARE CLEARED
WHEN THIS REGISTER IS READ.
$─├0┼ ├╔┴ ╘IMER ┴ CONTROL REGISTER.
BIT 7 ╘IME OF DAY CLOCK FREQUENCY
0 = 50 ╚ERTZ
1 = 60 ╚ERTZ
BIT 6 ╙ERIAL PORT MODE
0 = INPUT
1 = OUTPUT
BIT 5 ╘IMER ┴ TO COUNT
0 = ├╬╘ +VE EDGES
1 = THETA2 +VE EDGES
BIT 4 ╞ORCE LOAD TIMER ┴ WHEN
THIS BIT IS SET TO 1 (IT IS
RESET TO 0 AUTOMATICALLY)
BIT 3 ╘IMER ┴ RUN MODE
0 = ├ONTINUOUS
1 = ╧NE-SHOT
BIT 2 ╘IMER ┴ ╧UTPUT ═ODE ON ╨┬6
0 = ╨ULSE
1 = ╘OGGLE
BIT 1 ╘IMER ┴ OUTPUT ON ╨┬6?
0 = ╬O
1 = ┘ES
BIT 0 ╙TART/╙TOP TIMER ┴
0 = ╙TART
1 = ╙TOP
$──00 ├╔┴ #2 ─ATA PORT ┴
BIT 7 ╙ERIAL BUS ─┴╘┴ INPUT
BIT 6 ╙ERIAL BUS ├╠╦ INPUT
BIT 5 ╙ERIAL BUS ─┴╘┴ OUTPUT
(INVERTED)
BIT 4 ╙ERIAL BUS ├╠╦ OUTPUT
(INVERTED)
BIT 3 ╙ERIAL BUS ┴╘╬ OUTPUT
(INVERTED)
BIT 2 ╥╙-232 ─ATA OUTPUT
(NON-INVERTED)
BIT 1 ╓╔├ BANK SELECT HIGH BIT
BIT 0 ╓╔├ BANK SELECT LOW BIT
╫┴╥╬╔╬╟!
╘IMER ┴ ON ├╔┴ #1 IS NORMALLY USED BY
THE OPERATING SYSTEM! ├ARE MUST BE
TAKEN WHEN USING THIS TIMER!
╞OR ┼XAMPLE:
1) ╙TOP TIMER ┴
2) ╞ORCE LOAD TIMER ┴
3) ╙AVE THE COUNT FOR TIMER ┴ IN A
SAFE PLACE.
4) ╒SE TIMER ┴ AS REQUIRED
5) ╫HEN FINISHED WITH TIMER ┴, RESTORE
THE COUNT TO TIMER ┴.
6) ╞ORCE LOAD TIMER ┴.
7) ╥E-START TIMER ┴.
╔F TIMER ┴ INTERRUPT MUST BE DISABLED,
MAKE SURE TO RE-ENABLE IT WHEN YOUR
DONE. ╔T IS BEST TO AVOID DOING THIS
BY DISABLING ┴╠╠ INTERRUPTS BY USING
THE ╙┼╔ (SET INTERRUPT DIABLE FLAG)
INSTRUCTION OF THE 6510 PROCESSOR.
┬╒╥╙╘ ├OMMANDS (1581)
---------------------
╒NLESS NOTED, ALL COMMANDS USE ┬╒╥╙╘
HANDSHAKE PROTOCOL.
┴LL ┬╒╥╙╘ COMMANDS BEGIN WITH ╒0
BYTE 0 %01010101
BYTE 1 %00110000
╥┼┴─
----
BYTE 2 %╠┼╪╙000╬
BYTE 3 ╘RACK
BYTE 4 ╙ECTOR
BYTE 5 ╬UMBER OF SECTORS
BYTE 6 ╬EXT TRACK (OPTIONAL)
╥ANGE: ┴LL VALUES ARE DETERMINED BY THE
PARTICULAR DISK FORMAT.
├ONVENTIONS: ┬EFORE YOU ╥┼┴─ A DISK, IT
MUST BE LOGGED-IN USING EITHER THE
╔╬╤╒╔╥┼ ─╔╙╦α╞╧╥═┴╘ OR ╤╒┼╥┘ ─╔╙╦
╞╧╥═┴╘ COMMANDS. ╘HIS MUST BE DONE ONCE
FOR EACH TIME YOU CHANGE THE DISK.
╧UTPUT: ╧NE ┬╒╥╙╘ STATUS BYTE, FOLLOWED
BY ┬╒╥╙╘ DATA, IS SENT FOR EACH SECTOR
TRANSFERED. ┴N ERROR PREVENTS DATA FROM
BEING SENT UNLESS THE ┼ BIT IS SET.
╫╥╔╘┼
-----
BYTE 2 %╠┼╪╙001╬
BYTE 3 ╘RACK
BYTE 4 ╙ECTOR
BYTE 5 ╬UMBER OF SECTORS
BYTE 6 ╬EXT TRACK (OPTIONAL)
╥ANGE: ┴LL VALUES ARE DETERMINED BY THE
PARTICULAR DISK FORMAT.
├ONVENTIONS: ┬EFORE YOU ╫╥╔╘┼ A DISK IT
MUST BE LOGGED-IN USING EITHER THE
╔╬╤╒╔╥┼ ─╔╙╦α╞╧╥═┴╘ OR ╤╒┼╥┘ ─╔╙╦
╞╧╥═┴╘ COMMANDS. ╘HIS MUST BE DONE ONCE
FOR EACH TIME YOU CHANGE THE DISK
╔NPUT: ╚OST MUST TRANSFER ┬╒╥╙╘ DATA
╧UTPUT: ╧NE ┬╒╥╙╘ STATUS BYTE, AFTER
EACH SECTOR TRANSFERED.
╔╬╤╒╔╥┼ ─╔╙╦
------------
BYTE 2 %╪╪╪╙010╬
╧UTPUT: ╧NE BURST STATUS BYTE.
╞╧╥═┴╘
------
BYTE 2 %═╪╪╪011╬
BYTE 3 ╙ECTOR SIZE (OPTIONAL)
1 = 256 BYTES
2 = 512 BYTES (DEFAULT)
3 = 1024 BYTES
BYTE 4 ╠AST TRACK NUMBER (OPTIONAL)
DEFAULT = 79
BYTE 5 ╬UMBER OF SECTORS (OPTIONAL)
DEPENDS ON BYTE 3!
5 1024 BYTE SECTORS
10 512 BYTE SECTORS (DEFAULT)
16 256 BYTE SECTORS
BYTE 6 ╙TARTING TRACK (OPTIONAL)
DEFAULT = 0
BYTE 7 ╞ILL BYTE (OPTIONAL)
DEFAULT = $┼5
BYTE 8 ╙TARTING SECTOR (OPTIONAL)
DEFAULT = 1
╨ROTOCOL: ├ONVENTIONAL.
╧UTPUT: ╬ONE. ╙TATUS WILL BE UPDATED
WITHIN THE DRIVE.
╤╒┼╥┘α─╔╙╦α╞╧╥═┴╘
-----------------
BYTE 2 %╞╪╘╙101╬
BYTE 3 ╧╞╞╙┼╘ (OPTIONAL)
╧UTPUT: ┬╥╒╥╙╘ STATUS BYTE FROM THE
PRESENT TRACK, OR THE TRACK AT THE
OFFSET
╔╬╤╒╔╥┼α╙╘┴╘╒╙
--------------
BYTE 2 %╫├═0110╬
BYTE 3 ╬EW STATUS
BYTE 4 ╬EW ╧╥┴ MASK
BYTE 5 ╬EW ┴╬─ MASK
╨ROTOCOL: ┬╒╥╙╘ (╫=1) HANDSHAKE, OR
CONVENTIONL (╫=0).
╧UTPUT: ╬ONE (╫=0), ┬╒╥╙╘ STATUS (╫=1).
─╒═╨α╘╥┴├╦α├┴├╚┼α┬╒╞╞┼╥
-----------------------
BYTE 2 α%╞╙╪11101
BYTE 3 ╨HYSICAL TRACK
├╚╟╒╘╠
------
BYTE 2 %╪╪╪11110
BYTE 3 ╒TILITY COMMANDS
BYTE 4 ├OMMAND PARAMETER
┬1 ╞AST SERIAL
┬0 ╙LOW SERIAL
╙ ╙ECTOR INTERLEAVE
╥ ╥ETRIES
╘ ╘EST ╥╧═ SIGNATURE
╓0 ╓ERIFY DISK ╧N
╓1 ╓ERIFY DISK ╧FF
═╥ ═EMORY READ
═╫ ═EMORY WRITE
N ╬EW DEVICE NUMBER (N=4TO30)
╨ROTOCOL: ├ONVENTIONAL.
╞┴╙╘╠╧┴─
--------
BYTE 2 %╨╪╪11111
BYTE 3 ╞ILE NAME
BYTE N " "
╧UTPUT: ┬╒╥╙╘ STATUS BY PRECEDING EACH
SECTOR TRANSFERED. ╘HE BYTE FOLLOWING
THE ┼╧╔ STATUS BYTE IS THE NUMBER OF
DATA BYTES TO FOLLOW.
├OMMAND FLAGS
-------------
├ ├HANGE FLAG (├=1 ╫=1-LOG IN DISK, C=1
W=0-RETURN WHETHER DISK WAS LOGGED IN
┼ ╔GNORE ERROR?
0 = ╬O
1 = ┘ES
╞ ╞ORCE?
0 = ╬O
1 = ┘ES
╞OR ╤╒┼╥┘α─╔╙╦α╞╧╥═┴╘ FORCES HEAD TO
STEP TO OFFSET TRACK.
╞OR ─╒═╨α╘╥┴├╦α├┴├╚┼α┬╒╞╞┼╥ FORCES
WRITE WHETHER OR NOT CACHE WAS
ALTERED.
╠ ╠OGICAL FLAG
0 = ╨HYSICAL TRACK AND SECTOR
1 = ╠OGICAL TRACK AND SECTOR
═ ═ODE
0 = ╥ESIDENT DISK FORMAT (IGNORE
BYTES 3 TO 8, USE DEFAULTS).
1 = ┴LIEN DISK FORMAT (USE BYTES 3 TO
8, IGNORE DEFAULTS).
╞OR ╔╬╤╒╔╥┼ ╙╘┴╘╒╙
0 = ╬O MASK TO WRITE.
1 = ╫RITE ┴╬─/╧╥ MASK.
╬ ─RIVE ╬UMBER
╨ ╨ROGRAM TYPE?
0 = ┘ES
1 = ╬O
╙ ╙IDE SELECT
╫ ╫RITE SWITCH (0=WRITE).
╪ ─ON'T CARE (CAN BE 0 OR 1).
╙╘┴╘╒╙α┬┘╘┼
-----------
BIT 7 ═╧─┼
6 ─╬
5 ╙╙┌0
4 ╙╙┌1
3 ╙╘3
2 ╙╘2
1 ╙╘1
0 ╙╘0
═╧─┼ = 0 ╥ESIDENT DISK FORMAT (DEFAULT
PHYSICAL FORMAT WITH DIRECTORY
AND ┬┴═ INFORMATION).
═╧─┼ = 1 ┴LIEN DISK FORMAT (NON-DEFAULT
PHYSICAL FORMAT, OR DEFAULT
PHYSICAL FORMAT WITHOUT ┬┴═
INFORMATION AND DIRECTORY).
─╬ = ─RIVE NUMBER.
╙┌ = ╙ECTOR SIZE
00 128 BYTE
01 256 BYTE
10 512 BYTE
11 1024 BYTE
╙╘ = ├ONTROLLER STATUS
000╪ ╧╦
0010 ├┴╬'╘α╞╔╬─α╚┼┴─┼╥α┬╠╧├╦
0011 ╬╧α┴──╥┼╙╙α═┴╥╦
0100 ─┴╘┴α┬╠╧├╦α╬╧╘α╨╥┼╙┼╬╘
0101 ─┴╘┴α├╥├α┼╥╥╧╥
0110 ╞╧╥═┴╘α┼╥╥╧╥
0111 ╓┼╥╔╞┘α┼╥╥╧╥
1000 ╫╥╔╘┼α╨╥╧╘┼├╘α┼╥╥╧╥
1001 ╚┼┴─┼╥α┬╠╧├╦α├╥├α┼╥╥╧╥
1010 ╫╥╔╘┼α╨╥╧╘┼├╘┼─
1011 ─╔╙╦α├╚┴╬╟┼
1100 ─╔╙╦α╞╧╥═┴╘α╬╧╘α╠╧╟╔├┴╠
1101 ╥┼╙┼╥╓┼─
1110 ╙┘╬╘┴╪α┼╥╥╧╥
1111 ╬╧α─╥╔╓┼α╨╥┼╙┼╬╘